module Shapes.Tests
  ( tests
  ) where

import           Test.Tasty
import           Test.Tasty.HUnit
import           Test.Tasty.QuickCheck as QC
import           Test.Tasty.SmallCheck as SC

import           Penrose.Shapes
import           System.Random

tests :: TestTree
tests = testGroup "Shapes tests" [properties, unitTests]

properties :: TestTree
properties = testGroup "Properties" [scProps, qcProps]

gen :: StdGen
gen = mkStdGen seed
  where
    seed = 16 -- deterministic RNG with seed

circ_get_set_id :: Assertion
circ_get_set_id =
  let (cir, g) = defaultShapeOf gen circType
  in let x = 10.0
     in let res = getX $ setX (FloatV x) cir
        in (res == x) @?= True

scProps = testGroup "(checked by SmallCheck)" []

qcProps = testGroup "(checked by QuickCheck)" []

-- Module: topic: function: property
unitTests =
  testGroup
    "Unit tests"
    [testCase "one kind of object, get/set identity" circ_get_set_id]
